package com.javarush.test.level16.lesson13.bonus02;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/* Клубок
1. Создай 5 различных своих нитей c отличным от Thread типом:
1.1. нить 1 должна бесконечно выполняться;
1.2. нить 2 должна выводить "InterruptedException" при возникновении исключения InterruptedException;
1.3. нить 3 должна каждые полсекунды выводить "Ура";
1.4. нить 4 должна реализовать интерфейс Message, при вызове метода showWarning нить должна останавливаться;
1.5. нить 5 должна читать с консоли цифры пока не введено слово "N", а потом вывести в консоль сумму введенных цифр.
2. В статическом блоке добавь свои нити в List<Thread> threads в перечисленном порядке.
3. Нити не должны стартовать автоматически.
*/

public class Solution {
    public static void main(String[] args)
    {
        Thread thread4 = threads.get(3);
        Message message = (Message) thread4;
        thread4.start();
        //Thread.sleep();
        message.showWarning();
        System.out.println(thread4.isAlive());
    }

    public static List<Thread> threads = new ArrayList<Thread>(5);

    static
    {
        threads.add(new thread1());
        threads.add(new thread2());
        threads.add(new thread3());
        threads.add(new thread4());
        threads.add(new thread5());
    }


    public static class thread1 extends Thread
    {
        public void run()
        {
            while(true)
            {
            }
        }
    }

    public static class thread2 extends Thread
    {
        public void run()
        {
            try
            {
                while (!isInterrupted())
                {

                }
                throw new InterruptedException();
            }
            catch (InterruptedException e)
            {
                System.out.print("InterruptedException");
            }

        }
    }

    public static class thread3 extends Thread
    {
        public void run()
        {
            while(true)
            {

                try
                {
                    System.out.print("Ура!");
                    sleep(500);
                }
                catch (InterruptedException e)
                {

                }
            }
        }
    }

    public static class thread4 extends Thread implements Message
    {
        @Override
        public void showWarning()
        {
            this.interrupt();
            try
            {
                this.join();

            }
            catch (InterruptedException e)
            {

            }

        }

        public void run()
        {
            while(!isInterrupted())
            {

            }
        }
    }

    public static class thread5 extends Thread
    {
        public void run()
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

            try
            {
                String a;
                int sum=0;
                while(!(a=reader.readLine()).equals("N"))
                {
                    sum=sum+Integer.parseInt(a);
                }
                System.out.print(sum);
            }
            catch (IOException e)
            {
            }

        }
    }


}
